<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>受控组件_高阶+柯里化</title>
</head>
<body>
    <!-- 准备一个容器 -->
    <div id="test"></div>

    <!-- 引入react核心库 -->
    <script type="text/javascript" src="../js/react.development.js"></script>
    <!-- 引入react-dom，支持react操作dom -->
    <script src="../js/react-dom.development.js"></script>
    <!-- 引入babel，将jsx转为js -->
    <script src="../js/babel.min.js"></script>
    <!-- 引入prop-types ，对标签属性进行限制 -->
    <script src="../js/prop-types.js"></script>

    <script type="text/babel">/*此处写babel*/ 
    /*
        高阶函数:如果一个函数符合下面2个规范中的任何一个，那该函数就是高阶函数。
                1.若A函数，接收的参数是一个函数，那么A就可以称之为高阶函数。
                2.若A函数，调用的返回值依然是一个函数，那么A就可以称之为高阶函数。
                常见的高阶函数有: Promise、setTimeout、arr.map()等等

        函数的柯里化:通过函数调用 继续返回函数的方式，实现多次接收参数 最后统一处理的函数编码形式。
    */
        class Login extends React.Component{
            //初始化状态
            state = {
                username:'',
                password:''
            }
            //表单提交的回调
            handleSubmit = (event)=>{
                event.preventDefault();     //阻止表单提交 固定写法
                const{username,password} = this.state;
                alert(`用户名是${username},密码是${password}`)
            }

            saveFormDate = (dateType)=>{
                return(event)=>{
                    this.setState({[dateType]: event.target.value})
                }
            }
            //使用输入框自带 onchange事件
            render() {
                return(
                    <form onSubmit={this.handleSubmit} action="">
                        用户名: <input onChange={this.saveFormDate('username')} type="text" name="username"/>
                        密码: <input onChange={this.saveFormDate('password')} type="password" name="password"/>
                        <button>登录</button>
                    </form>
                )
            }
        }

        ReactDOM.render(<Login/>,document.getElementById('test'))
    </script>
</body>
</html>